package 力扣;

/**
 给你两个二进制字符串，返回它们的和（用二进制表示）。
 输入为 非空 字符串且只包含数字 1 和 0。

 示例 1:
 输入: a = "11", b = "1"
 输出: "100"
 示例 2:
 输入: a = "1010", b = "1011"
 输出: "10101"
 */
public class _67二进制求和 {
   // 从最后面开始计算，然后反转
    public String addBinary(String a, String b) {
        if( a ==null || a.length()==0) return b;
        if( b ==null || b.length()==0) return a;
        int c =0; //进位
        int i  = a.length()-1;
        StringBuffer sb = new StringBuffer();
        int j = b.length()-1;
        while ( i >= 0 || j >= 0){
            if( i>=0 ) c += a.charAt(i--)-'0';
            if( j>=0 ) c += b.charAt(j--)-'0';
            sb.append(c % 2);
            c >>=1; //向右移动一位用于判断是否有进位
        }
        //反转结果
        String s = sb.reverse().toString();
        return  c==1 ? '1'+s : s;
    }
}
